package com.kk.util;

import org.springframework.core.convert.converter.Converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 对前端的日期进行解析
 * 通过正则表达式替换非数字字符来简化解析操作
 *
 * @author 刘昱恺
 * @date 2022/03/30
 */
public class TransformDate implements Converter<String,Date> {
    /**
     * 对传入的字符串进行判读，带：则进行年月日时分秒解析，否则进行年月日解析
     *
     * @param date 日期
     * @return {@link Date}
     * @throws ParseException 解析异常
     */
    private static Date transfrom(String date) throws ParseException {
        Date finalDate = null;
        if(date.contains(":")){
            finalDate = transfromDateTime(date);
        }else {
            finalDate = transfromDate(date);
        }
        return finalDate;
    }

    /**
     * 对年月日格式的字符串进行转换
     * 使用正则表达式替换字符串内所有非数字字符为/方便后续格式化
     *
     * @param date string格式的字符串
     * @return 转换成Date类型的时间数据
     * @throws ParseException 日期解析异常
     */
    private static Date transfromDate(String date) throws ParseException {
        date = date.replaceAll("\\D+","/");
        SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
        Date datetime = format.parse(date);
        return datetime;
    }

    /**
     * 对前端年月日时分格式的字符串进行转换
     * 使用正则表达式替换字符串内所有非数字字符为/方便后续格式化
     *
     * @param date string格式的字符串
     * @return 转换后Date类型的时间数据
     * @throws ParseException 解析异常
     */
    private static Date transfromDateTime(String date) throws ParseException {
        date = date.replaceAll("\\D+","/");
        SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd/HH/mm");
        Date datetime = format.parse(date);
        return datetime;
    }
    public static void main(String[] args) throws ParseException {
        Date transfrom = transfrom("2022-03-16T13:02");
        System.out.println(transfrom);
    }

    @Override
    public Date convert(String source) {
        try {
            return transfrom(source);
        } catch (ParseException e) {
            e.printStackTrace();
            return null;
        }
    }
}
